package 回溯;

public class LeetCode463_岛屿的周长 {
    public int islandPerimeter(int[][] grid) {
        int sum = 0;
        for (int i = 0; i < grid.length; i++) {
            for (int j = 0; j < grid[0].length; j++) {
                if(grid[i][j] == 1) {
                    // 只要找到这一个为1的方格，就找到了岛屿的起点
                    sum += DFS(grid, i, j);
                }
            }
        }
        return sum;
    }

    int DFS(int[][] grid, int r, int c) {
        // 这里说明从岛屿走到了水域或者是边界，那么这条边就要+1
        if(!(r >= 0 && r < grid.length && c >= 0 && c < grid[0].length)
                || grid[r][c] == 0) {
            return 1;
        }
        // 判断这个方格有没有走过
        if (grid[r][c] != 1) {
            return 0;
        }
        grid[r][c] = 2; // 这个方格走过了，置为2
        return DFS(grid, r-1, c)
                + DFS(grid, r+1, c)
                + DFS(grid, r, c-1)
                + DFS(grid, r, c+1);
    }

}
